11942
9979
Jeg vil slette en filial både lokalt og eksternt.
Mislyktes forsøk på å slette en ekstern filial
$ git branch -d fjernkontroller / origin / bugfix
feil: gren 'fjernkontroller / opprinnelse / feilrettelse' ble ikke funnet.
$ git branch -d origin / bugfix
feil: gren 'origin / bugfix' ble ikke funnet.
$ git branch -rd origin / bugfix
Slettet ekstern grenoppretting / bugfix (var 2a14ef7).
$ git push
Alt oppdatert
$ git pull
Fra github.com:gituser/gitproject
* [ny gren] bugfix -> origin / bugfix
Allerede oppdatert.
Hva skal jeg gjøre annerledes for å lykkes med å slette fjernkontrollen / opprinnelsen / bugfix-grenen både lokalt og eksternt? 
1
2
Neste
Kortfattet sammendrag
$ git push -d  
$ git branch -d 
Vær oppmerksom på at fjernnavnet i de fleste tilfeller er opprinnelse.
I et slikt tilfelle må du bruke kommandoen slik.
$ git push -d origin 
Slett lokal filial
For å slette den lokale avdelingen, bruk ett av følgende:
$ git branch -d branch_name
$ git branch -D branch_name
Merk: Alternativet -d er et alias for --delete, som bare sletter grenen hvis den allerede er helt slått sammen i oppstrømsgrenen. Du kan også bruke -D, som er et alias for --delete --force, som sletter grenen "uavhengig av sammenslått status." [Kilde: man git-branch]
Vær også oppmerksom på at git branch -d branch_name mislykkes hvis du er for øyeblikket
i grenen du vil fjerne. Meldingen starter med
feil: Kan ikke slette grenen 'filialnavn'. I så fall bytter du først
til en annen gren, for eksempel: git checkout master.
Slett ekstern filial [Oppdatert 8. september 2017]
Fra og med Git v1.7.0 kan du slette en ekstern gren ved hjelp av
$ git push  - slett 
som kan være lettere å huske enn
$ git push : 
som ble lagt til i Git v1.5.0 "for å slette en ekstern gren eller en tag."
Fra og med Git v2.8.0 kan du også bruke git push med alternativet -d som et alias for --delete.
Derfor vil versjonen av Git du har installert diktere om du trenger å bruke den enklere eller hardere syntaksen.
Slett ekstern filial [Originalt svar fra 5. januar 2010]
Fra kapittel 3 i Pro Git av Scott Chacon:
Slette eksterne filialer
Anta at du er ferdig med en ekstern gren - si at du og dine samarbeidspartnere er ferdige med en funksjon og har slått den sammen til fjernkontrollens hovedfilial (eller hvilken gren som din stabile kodelinje er i). Du kan slette en ekstern gren ved å bruke den ganske stumme syntaksen git push [fjernnavn]: [gren]. Hvis du vil slette din server-fix gren fra serveren, kjører du følgende:
$ git push opprinnelse: serverfix
Til git@github.com: schacon / simplegit.git
- [slettet] serverfix
Boom. Ingen flere filialer på serveren din. Det kan være lurt å lytte til denne siden fordi du trenger den kommandoen, og du vil sannsynligvis glemme syntaksen. En måte å huske denne kommandoen på er å huske git push [remotename] [localbranch]: [remotebranch] syntaks som vi gikk over litt tidligere. Hvis du slutter med [localbranch] -delen, så sier du i utgangspunktet: "Ta ingenting på min side og gjør det til [remotebranch]."
Jeg utstedte git push-opprinnelse: bugfix og det fungerte vakkert. Scott Chacon hadde rett - jeg vil ønske å øre den siden (eller nesten hunden øre ved å svare på dette på Stack Overflow).
Så bør du utføre dette på andre maskiner
# Hent endringer fra alle fjernkontroller og slett lokalt
# fjerntliggende slettede grener / tagger osv
# - beskjære vil gjøre jobben: -;
git henting - alt - beskjære
å forplante endringer.
|
Matthews svar er flott for å fjerne eksterne grener, og jeg setter også pris på forklaringen, men for å gjøre et enkelt skille mellom de to kommandoene:
Slik fjerner du en lokal filial fra maskinen din:
git branch -d {the_local_branch} (bruk -D i stedet for å tvinge sletting av grenen uten å sjekke sammenslått status)
Slik fjerner du en ekstern gren fra serveren:
git push origin - slett {the_remote_branch}
Referanse: Git: Slett en gren (lokal eller ekstern)
|
De korte svarene
Hvis du vil ha mer detaljerte forklaringer på følgende kommandoer, kan du se de lange svarene i neste avsnitt.
Slette en ekstern gren
git push origin --delete  # Git versjon 1.7.0 eller nyere
git push origin -d  # Kortere versjon (Git 1.7.0 eller nyere)
git push origin:  # Git-versjoner eldre enn 1.7.0
Slette en lokal filial
git branch --delete 
git branch -d  # Kortere versjon
git branch -D  # Tving-slett ikke-sammenslåtte grener
Slette en lokal fil for ekstern sporing
git gren --delete - fjernkontroller  / 
git branch -dr  /  # Kortere
git fetch  --prune # Slett flere foreldede fjernsporingsgrener
git hent  -p # Kortere
Det lange svaret: det er tre forskjellige grener å slette!
Når du har å gjøre med å slette filialer både lokalt og eksternt, må du huske at det er tre forskjellige grener involvert:
Lokalgrenen X.
Den fjerne opprinnelsesgrenen X.
Den lokale fjernsporingsgrenens opprinnelse / X som sporer den eksterne grenen X.
Den opprinnelige plakaten som ble brukt:
git branch -rd origin / bugfix
Som bare slettet den lokale fjernsporing av grenens opprinnelse / bugfix, og ikke den faktiske eksterne grenens bugfix på opprinnelsen.
For å slette den faktiske eksterne grenen, trenger du
git push origin - slett feilretting
Ekstra detaljer
De følgende avsnittene beskriver ytterligere detaljer som du må ta hensyn til når du sletter fjernkontroll- og fjernsporingsgrener.
Hvis du skyver for å slette eksterne grener, fjernes også grener som fjernsporer
Merk at du sletter den eksterne grenen X fra kommandolinjenved å bruke en git push fjernes også den lokale fjernsporingsgrenens opprinnelse / X, så det er ikke nødvendig å beskjære den foreldede fjernsporingsgrenen med git fetch --prune eller git fetch -p. Det ville imidlertid ikke skade hvis du gjorde det uansett.
Du kan bekrefte at fjernsporingsgrenens opprinnelse / X også ble slettet ved å kjøre følgende:
# Se bare fjernsporing av grener
git gren - fjernkontroller
git gren -r
# Se både strengt lokale så vel som fjernsporende grener
git gren - alt
git gren -a
Beskjæring av det foreldede lokale fjernsporingsgrenens opprinnelse / X
Hvis du ikke slettet den eksterne grenen X fra kommandolinjen (som ovenfor), vil det lokale depotet ditt fremdeles inneholde (et nå utdatert) fjernsporende grenopprinnelse / X. Dette kan skje hvis du for eksempel slettet en ekstern gren direkte gjennom GitHubs nettgrensesnitt.
En typisk måte å fjerne disse foreldede fjernsporingsgrenene på (siden Git versjon 1.6.6) er å bare kjøre git-henting med --prune eller kortere -p. Merk at dette fjerner alle foreldede lokale fjernsporingsgrener for eventuelle eksterne grener som ikke lenger eksisterer på fjernkontrollen:
git hent opprinnelse - beskjære
git hente opprinnelse -p # Kortere
Her er det relevante sitatet fra 1.6.6 utgivelsesnotater (vektlegging min):
"git fetch" lærte - alle og - flere valg, å kjøre henting fra
mange arkiver, og --prune-alternativet for å fjerne ekstern sporing
grener som ble foreldede. Disse lager "git remote update" og "git
ekstern beskjæring "mindre nødvendig (det er ingen plan for å fjerne" fjernkontroll
oppdater "eller" ekstern beskjæring ", skjønt).
Alternativ til automatisk beskjæring ovenfor for foreldede fjernsporingsgrener
Alternativt, i stedet for å beskjære dine foreldede lokale fjernsporingsgrener gjennom git fetch -p, kan du unngå å utføre den ekstra nettverksoperasjonen ved å bare fjerne grenen manuelt med flaggene --remote eller -r:
git gren --delete - fjern opprinnelse / X
git gren -dr opprinnelse / X # kortere
Se også
git-branch (1) Manuell side.
git-fetch (1) Manuell side.
Pro Git § 3.5 Git Branching - Remote Branches.
|
Fremgangsmåte for å slette en filial:
For å slette den eksterne grenen:
git push origin - slett 
For å slette den lokale avdelingen har du tre måter:
1: git gren -D 
2: git-gren --delete --force  # Samme som -D
3: git-gren - slett  # Feil ved fletting
Forklar: OK, bare forklar hva som skjer her!
Bare gjør git push origin - slett bare for å slette den eksterne grenen, legg til navnet på grenen på slutten, og dette vil slette og skyve den til fjernkontrollen samtidig ...
Også git gren -D, som bare sletter den lokale grenen! ...
-D står for --delete - force som vil slette grenen selv om den ikke er slått sammen (force delete), men du kan også bruke -d som står for --delete som kaster en feil i henhold til grenens flettestatus ...
Jeg oppretter også bildet nedenfor for å vise trinnene:
|
Du kan også bruke følgende for å slette den eksterne grenen
git push - slett opprinnelse serverfix
Som gjør det samme som
git push origin: serverfix
men det kan være lettere å huske.
|
Tips: Når du sletter grener ved hjelp av
git branch -d  # Sletter lokal filial
eller
git push origin:  # Sletter ekstern gren
bare referansene slettes. Selv om filialen faktisk er fjernet på fjernkontrollen, finnes referansene til den fremdeles i de lokale arkivene til teammedlemmene dine. Dette betyr at for andre teammedlemmer er de slettede grenene fremdeles synlige når de gjør en git-gren.
For å løse dette kan teammedlemmene beskjære de slettede grenene med
git ekstern beskjæring 
Dette er vanligvis git ekstern beskjæringsopprinnelse.
|
Hvis du vil slette en gren, må du først sjekke ut til den andre grenen enn grenen som skal slettes.
git checkout other_than_branch_to_be_deleted
Slette den lokale avdelingen:
git branch -D branch_to_be_deleted
Slette den eksterne grenen:
git push origin - slett gren_til_slett
|
git gren -D 
git gren -D -r opprinnelse / 
git push opprinnelse: 
|
Dette er enkelt: Bare kjør følgende kommando:
For å slette en Git-gren både lokalt og eksternt, slett først den lokale grenen ved hjelp av denne kommandoen:
git gren -d eksempel
(Dette eksemplet er grennavnet.)
Og etter det, slett den eksterne grenen ved hjelp av denne kommandoen:
git push origin: eksempel
|
Det er veldig enkelt:
For å slette den eksterne grenen
git push -d origin 
Eller
git push origin: 
For å slette den lokale avdelingen med kraft
git branch -D 
|
En annen tilnærming er:
git push - beskjære opprinnelse
ADVARSEL: Dette vil slette alle eksterne grener som ikke eksisterer lokalt. Eller mer omfattende,
git push - speil
vil effektivt få fjernregisteret til å se ut som den lokale kopien av depotet (lokale hoder, fjernkontroller og koder speiles på fjernkontrollen).
|
Jeg bruker følgende i mine Bash-innstillinger:
alias git-shoot = "git pushopprinnelse - slett "
Da kan du ringe:
git-shoot grennavn
|
Slett lokalt:
For å slette en lokal filial kan du bruke:
git branch -d 
For å slette en gren med makt, bruk -D i stedet for -d.
git branch -D 
Slett eksternt:
Det er to alternativer:
git push opprinnelse: grennavn
git push origin - slett filialnavn
Jeg vil foreslå at du bruker den andre måten, da det er mer intuitivt.
|
Siden januar 2013 inkluderte GitHub en Slett gren-knapp ved siden av hver gren i "Grener" -siden.
Relevant blogginnlegg: Opprett og slett grener
|
Hvis du vil fullføre begge disse trinnene med en enkelt kommando, kan du lage et alias for det ved å legge til nedenfor i ~ / .gitconfig:
[alias]
rmbranch = "! f () {git branch -d $ {1} && git push origin --delete $ {1};}; f"
Alternativt kan du legge til dette i din globale konfigurasjon fra kommandolinjen ved hjelp av
git config --global alias.rmbranch \
'! f () {git branch -d $ {1} && git push origin --delete $ {1}; }; f '
MERKNAD: Hvis du bruker -d (små bokstaver d), blir grenen bare slettet hvis den er slått sammen. For å tvinge slettingen til å skje, må du bruke -D (store bokstaver D).
|
For å slette filialen din lokalt og eksternt
Kasse til mastergren - git checkout master
Slett den eksterne grenen - git push origin - slett 
Slett din lokale filial - git gren - slett 
|
Du kan også gjøre dette ved hjelp av git ekstern beskjæringsopprinnelse
$ git ekstern beskjæringsopprinnelse
Beskjæring av opprinnelse
URL: git@example.com/yourrepo.git
* [beskåret] opprinnelse / noen grener
Det beskjærer og sletter fjernsporende grener fra en git-gren -r-oppføring.
|
I tillegg til de andre svarene bruker jeg ofte verktøyet git_remote_branch. Det er en ekstra installasjon, men det gir deg en praktisk måte å samhandle med eksterne grener. I dette tilfellet, for å slette:
grb slette gren
Jeg opplever at jeg også bruker publiserings- og sporkommandoene ganske ofte.
|
En one-liner-kommando for å slette både lokal og ekstern:
D = gren-navn; git gren -D $ D; git push opprinnelse: $ D
Eller legg til aliaset nedenfor i ~ / .gitconfig. Bruk: git kill gren-name
[alias]
kill = "! f () {git branch -D \" $ 1 \ "; git push origin --delete \" $ 1 \ ";}; f"
|
Slette filialer
La oss anta at arbeidet vårt med "kontaktform" er fullført, og at vi allerede har integrert det i "master". Siden vi ikke trenger det lenger, kan vi slette det (lokalt):
$ git gren -d kontaktskjema
Og for å slette den eksterne grenen:
git push origin - slett kontaktskjema
|
Slett ekstern gren
git push origin: 
Slett lokal filial
git branch -D 
Slett trinn for lokal filial:
kassen til en annen gren
slett lokal filial
|
Bare si:
git branch -d 
git push origin: 
|
git push origin --delete 
er lettere å huske enn
git push origin: branchName
|
Nå kan du gjøre det med GitHub Desktop-applikasjonen.
Etter at du har startet applikasjonen
Klikk på prosjektet som inneholder grenen
Bytt til grenen du vil slette
Fra "Branch" -menyen velger du "Unpublish ..." for å få grenen slettet fra GitHub-serverne.
Fra "Gren" -menyen, velg "Slett" grennavn "..." for å få filialen slettet av din lokale maskin (AKA maskinen du jobber med for tiden)
|
Slette lokalt - (normalt)
git branch -d my_branch
Hvis filialen din er i en ombyggings- / sammenslåingsprosess og det ikke ble gjort riktig, betyr det at du vil få en feil, Rebase / Merge pågår, så i så fall vil du ikke kunne slette filialen din.
Så enten må du løse omgraderingen / sammenslåingen. Ellers kan du tvinge sletting ved å bruke,
git branch -D my_branch
Slik sletter du på fjernkontrollen:
git push - slett opprinnelse my_branch
Du kan gjøre det samme ved å bruke:
git push origin: my_branch # Lett å huske begge vil gjøre det samme.
Grafisk representasjon:
|
Dette fungerer ikke hvis du har en tag med samme navn som grenen på fjernkontrollen:
$ git push origin: gren-eller-tag-navn
feil: dst refspec gren-eller-tag-navn samsvarer med mer enn en.
feil: klarte ikke å skyve noen refs til 'git@github.com: SomeName / some-repo.git'
I så fall må du spesifisere at du vil slette grenen, ikke koden:
git push origin: refs / heads / branch-or-tag-name
På samme måte, for å slette koden i stedet for grenen, vil du bruke:
git push origin: refs / tags / branch-or-tag-name
|
Mange av de andre svarene vil føre til feil / advarsler. Denne tilnærmingen er relativt idiotsikker, selv om du fremdeles kan trenge git branch -D branch_to_delete hvis den ikke er helt sammenslått i noen_other_branch.
git checkout some_other_branch
git push origin: branch_to_delete
git branch -d branch_to_delete
Ekstern beskjæring er ikke nødvendig hvis du slettet den eksterne grenen. Det brukes bare for å få de mest oppdaterte fjernkontrollene som er tilgjengelige på et depot du sporer. Jeg har observert at git-henting vil legge til fjernkontroller, ikke fjerne dem. Her er et eksempel på når git ekstern beskjæringsopprinnelse faktisk vil gjøre noe:
Bruker Agjør trinnene ovenfor. Bruker B vil kjøre følgende kommandoer for å se de mest oppdaterte eksterne grenene:
git-henting
git ekstern beskjæringsopprinnelse
git gren -r
|
Jeg ble lei av googling for dette svaret, så jeg tok en lignende tilnærming til svaret som crizCraig la ut tidligere.
Jeg la til følgende i Bash-profilen min:
funksjon gitdelete () {
git push origin - slett $ 1
git gren -D $ 1
}
Hver gang jeg er ferdig med en gren (for eksempel fusjonert til master), kjører jeg følgende i terminalen min:
gitdelete my-branch-name
... som deretter sletter mitt filialnavn fra opprinnelse så vel som lokalt.
|
Før du utfører
git branch --delete 
sørg for at du først avgjør hva det eksakte navnet på den eksterne grenen er ved å utføre:
git ls-fjernkontroll
Dette vil fortelle deg hva du skal angi nøyaktig for  -verdien. (gren er skift mellom store og små bokstaver!)
|
Bruk:
git push origin: bugfix # Sletter ekstern gren
git branch -d bugfix # Må slette lokal filial manuelt
Hvis du er sikker på at du vil slette den, kjører du
git branch -D bugfix
Nå for å rydde opp slettede eksterne grener kjøres
git ekstern beskjæringsopprinnelse
|
1
2
Neste
Svært aktivt spørsmål. Tjen 10 rykte for å svare på dette spørsmålet. Omdømmekravet hjelper deg med å beskytte dette spørsmålet mot spam og ikke-svar-aktivitet.
Er ikke svaret du leter etter? Bla gjennom andre spørsmål merket git versjonskontroll git-branch git-push git-remote eller still ditt eget spørsmål.